package com.yqs.servlet; /**
 * @author Ye QS
 * @className ${NAME}
 * @description 分页+模糊搜索
 * @version 0.1
 * @date 2024/8/2 9:57
 * @since jdk11
 */

import com.yqs.entity.Emp;
import com.yqs.mapper.EmpMapper;
import com.yqs.utils.JsonUtil;
import com.yqs.utils.PageUtil;
import com.yqs.utils.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@WebServlet("/LPSFS")
public class ListPageFuzzyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取SqlSession对象，它是MyBatis中用于执行数据库操作的对象
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
        // 通过SqlSession获取EmpMapper接口的实例，用于访问数据库中的员工数据
        EmpMapper mapper = session.getMapper(EmpMapper.class);

        // 从请求参数中获取页码pageNum和每页显示的行数pageSize
        int pageNum = Integer.parseInt(req.getParameter("pageNum"));
        int pageSize = Integer.parseInt(req.getParameter("pageSize"));
        String ename = req.getParameter("ename");
        // 创建参数映射，用于分页查询
        Map<String, Object> params = new HashMap<>();
        // 计算数据库查询的起始行，MyBatis分页查询需要这个参数
        params.put("pageNum", pageSize * (pageNum - 1));
        params.put("pageSize", pageSize);
        params.put("ename", ename);
        // 执行分页查询，获取当前页的员工数据列表
        List<Emp> empsByPage = mapper.fuzzyGetEmpsByPage(params);
        // 获取总的员工数量，用于计算总页数
        int count = mapper.getEmpCount();
        // 计算总页数，使用PageUtil工具类的getTotalPages方法
        int totalPages = PageUtil.getTotalPages(count, pageSize);

        // 准备返回给前端的数据，包含员工列表、当前页码、每页大小和总页数
        Map<String, Object> maps = new HashMap<>();
        maps.put("empList", empsByPage);
        maps.put("pageNum", pageNum);
        maps.put("pageSize", pageSize);
        maps.put("totalPages", totalPages);

        // 使用JsonUtil工具类的getJson方法将数据以JSON格式写入响应中，这里需要JsonUtil类的具体实现
        JsonUtil.getJson(req, resp, maps);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
